/*
 * Scanline.h
 *
 *  Created on: 27/09/2009
 *      Author: ale
 */

#ifndef SCANLINE_H_
#define SCANLINE_H_

#include <vector>
#include "Punto.h"


typedef struct tArista {
    int ySup;
    float xIntersec, dxPorScan;
    struct tArista *siguiente;
} Arista;

class Scanline {
public:
	Scanline();
	virtual ~Scanline();

	void rellenar(const std::vector<Punto> &pts);

private:
	void insertarArista (Arista *list, Arista *arista);
	int ySiguiente (int k, const std::vector<Punto>& pts);
	void makeAristaRec(Punto& inferior, Punto& superior, int yComp, Arista *arista, Arista *aristas[]);
	void armarListaAristas (const std::vector<Punto>& pts, Arista *aristas[]);
	void armarListaActivas (int scan, Arista *active, Arista *aristas[]);
	void deleteSiguiente (Arista *q);
	void updateListaActivas (int scan, Arista *active);
	void reordenarListaActivas (Arista *active);
	void fillScan (int scan, Arista *active);

};
#endif /* SCANLINE_H_ */
